import 'package:flutter/cupertino.dart';
import 'package:flutterDemo/repository/api.dart';
import 'package:flutterDemo/repository/datas/home_banner_data.dart';
import 'package:flutterDemo/repository/datas/home_list_data.dart';

/// HomeViewModel 类负责处理首页相关的数据获取逻辑
//with 关键字用于混入（mixin），ChangeNotifier 是 Flutter 提供的一个混入类，用于实现简单的状态管理。
class HomeViewModel with ChangeNotifier {
  int pageCount = 1;
  // 用于存储轮播图数据
  List<HomeBannerData?>? bannerList;
  List<HomeListItemData>? listData = [];

  Future getBanner() async {
    List<HomeBannerData?>? list = await Api.instance.getBanner();
    bannerList = list ?? [];
    // 通知所有监听器数据已更新
    notifyListeners();
  }

  Future initListData(bool loadMore, {ValueChanged<bool>? callback}) async {
    if (loadMore) {
      pageCount++;
    } else {
      pageCount = 1;
      listData?.clear();
    }

    ///先获取置顶数据
    getTopList(loadMore).then((topList) {
      if (!loadMore) {
        listData?.addAll(topList ?? []);
      }

      ///再获取首页文章列表
      getHomeList(loadMore).then((allList) {
        listData?.addAll(allList ?? []);
        // 通知所有监听器数据已更新
        notifyListeners();

        if (callback != null) {
          callback.call(loadMore);
        }
      });
    });
  }

  ///获取首页文章列表
  Future getHomeList(bool loadMore) async {
    List<HomeListItemData>? list = await Api.instance.getHomeList("$pageCount");
    if (list != null && list.isNotEmpty) {
      return list;
    } else {
      if (loadMore && pageCount > 0) {
        return [];
      }
    }
    listData?.addAll(list ?? []);
    // 通知所有监听器数据已更新
    notifyListeners();
  }

  ///获取首页置顶数据
  Future<List<HomeListItemData>?> getTopList(bool loadMore) async {
    if (loadMore) {
      return [];
    }
    List<HomeListItemData>? list = await Api.instance.getHomeTopList();
    return list;
  }

  Future collectOrNo(bool isCollect, String? id, int index) async {
    // 使用三元运算符简化逻辑
    final bool? success = isCollect
        ? await Api.instance.collect(id: id)
        : await Api.instance.unCollect(id: id);
    // 直接使用布尔值判断，避免与 true 比较
    if (success == true) {
      listData?[index].collect = isCollect;
      notifyListeners();
    }
  }
}
